Conversation
Ship the first fully working build of RECKIT as a Vue 3 + Vite app. Routes per brand, a live CAM-LOG overlay wired to OBS WebSocket, a landing page index of all browser sources with search and preview, and a shared-widgets split so future brands can drop in audio / readout primitives. - Vue 3 + Vite 6 + Vue Router 4 + obs-websocket-js 5 + sass at src/ - SCSS 7-1 architecture (abstracts / base / layout / components), x25 typo scale, hud-label-base mixin, brand theming via CSS custom properties - Composables: use-obs-websocket (singleton), use-recording-status, use-audio-analyzer, use-scene-name - CAM-LOG at /@kyonax_on_tech/cam-person: HUD frame, dynamic SES::<scene>::T<NN> label, recording timer, audio meter bound to Mic/Aux, live diagnostic readout - Landing page at /: sticky frosted meta bar, brand tabs, responsive 3-column card grid, name/size/tags/requires search filter, status chips, preview modal with canvas-aspect iframe, postMessage trigger buttons - Shared widgets (src/shared/widgets/): audio-meter (self-contained OBS visualizer) and live-readout (text display with refresh_ms throttle) — drop into any brand, theme via --clr-primary-100 - Overlay card: **bold** emphasis markers in descriptions parsed without v-html; use_cases[] keyword tags rendered as chips and included in the search haystack - Version centralization: package.json is canonical; Vite injects __APP_VERSION__ at build time; src/shared/version.js exports VERSION + VERSION_TAG; UI imports VERSION_TAG (no hardcoded v0.x) - .gitignore hardened (editor state, OS junk, secret-file extensions, build caches, !.env.example negation for template) - README + package.json bumped to v0.3; CHANGELOG [v0.3] entry Modified-by: Cristian D. Moreno (Kyonax) <kyonax25@gmail.com>
Three CI jobs were failing on the v0.3 release PR. Fix each root cause and improve error reporting so future failures pin to a file and line instead of printing bare messages. ESLint (npm ci failure): - Regenerate package-lock.json against package.json@0.3.0 via `npm install --package-lock-only` (318 packages pinned, 0 vulnerabilities). - Remove package-lock.json from .gitignore. It is now committed; new comment warns not to re-add it. This is what `npm ci` requires. Security Scan (false positive in eslint.config.mjs): - The dangerous-call grep was matching the literal string 'Use DOM APIs instead of document.write().' inside the ESLint rule that *bans* document.write — the rule's own description was tripping the rule. Add --exclude=eslint.config.mjs to the dangerous-pattern scan (the config legitimately documents the banned patterns). - Add --exclude-dir=node_modules/dist/.cache guards so the scan behaves identically whether or not build output exists. - Emit real `::error file=<path>,line=<N>::` annotations per hit so errors pin to the exact source location on the PR diff. Also print human-readable `[category] file:line :: content` lines to the raw log so the failure is obvious without expanding annotations. License Headers (no file path in the raw log): - Echo `[MISSING HEADER] <file>` per hit and print a summary block at the end listing every failing path. Annotations also pin to `line=1` for inline display. - Extend the check to *.vue and *.scss for coverage parity with the rest of the source tree. Headers added to unblock the widened license check: - index.html: MPL block before DOCTYPE (HTML5-safe — comments before DOCTYPE do not trigger quirks mode). - eslint.config.mjs: MPL block prepended so `Cristian D. Moreno` lands on line 2 (was on line 7, outside the first-5-lines window the check reads). - 10 SCSS files (src/app/scss/main.scss + every 7-1 partial): MPL block prepended to each. Verified locally with CI-equivalent filters: dangerous-calls grep clean, license sweep clean, `npm run lint` 0 errors, `npm run build` clean (~980ms). Modified-by: Cristian D. Moreno (Kyonax) <kyonax25@gmail.com>
Three independent-but-related improvements to the CI pipeline.
1. Unit-test infrastructure. Vitest wired into the existing
Vite config with happy-dom and @vue/test-utils. Two
initial test files cover the version pipeline
(VERSION / VERSION_TAG derivation) and the overlays
registry schema (required fields, unique ids, status vocab,
use_cases[] type, em-dash ban, path format, canvas dims).
17 tests total. ESLint taught about Vitest globals on
*.test.{js,mjs} / *.spec.{js,mjs} / __tests__/**.
2. Pre-Check Failed label sync. New aggregator job at the
end of ci.yml reads every prior gate's result via needs:
and toggles the GitHub "Pre-Check Failed" label with
`gh pr edit --add-label` / `--remove-label`.
`if: always()` ensures the label syncs even when a prior
gate hard-fails. Requires `issues: write` +
`pull-requests: write` on the workflow, both added to the
top-level permissions block.
3. Broader triggers. Dropped the `branches: [master, dev]`
filter so every pull_request fires CI regardless of
target — a sub-PR into `feat-cam-person` is now gated the
same as a PR into dev. Added a `push` trigger for
feat-* / feat/** / feature/** / fix-* / fix/** branches so
developers get feedback before opening a PR. Concurrency
group keyed on `head_ref || ref` with
`cancel-in-progress: true` dedups push-vs-PR double runs
and cancels stale runs on rapid pushes.
PR template's Testing Coverage section rewritten to the
two-table format (#### Automated tests + #### Quality gates)
so the template reflects the actual post-Vitest state, and
the checklist's "All GitHub Checks have passed" item now
explicitly references the label.
CHANGELOG.org TODO refreshed with an INFRASTRUCTURE > TESTING
follow-up tracking broader coverage (composables, widgets,
landing page computed logic) once the foundation lands.
Verified locally: `npm run lint` 0 errors (6 documented
false-positive warnings), `npm run test` 17 passing,
`npm run build` ~1.0s clean.
Modified-by: Cristian D. Moreno (Kyonax) <kyonax25@gmail.com>
feat(v0.3): Vue app, CAM-LOG overlay, landing index, shared widgets
Protected Files ModifiedThe following protected files were changed in this PR:
Please ensure these changes are intentional and have been reviewed carefully. |
Modified-by: Cristian D. Moreno (Kyonax) <kyonax25@gmail.com>
Protected Files ModifiedOne or more files in the protected set were changed in this PR. Each category below explains why the file matters. Governance
CODEOWNERS / SECURITY / PR template changes affect how every future PR is reviewed. Review carefully. Supply Chain
Dependency or lockfile changes. Verify the diff (no unexpected packages, no version downgrades). CI / Security Config
Workflow / lint config. A quiet edit here can disable gates — diff against origin carefully. Build / Config
Build or gitignore config. Verify the build still passes and no ignored paths were accidentally un-ignored. Release Artifact
Release-tracking files. Expected on release PRs; flag on non-release PRs. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Checklist (check if it applies)
npm run lint)Pre-Check Failedlabel applied by CI)What does this PR do?
Ships RECKIT v0.3 to
master. Fast-forwards the default branch to the cut already reviewed and merged intodevvia #1. Contents are identical — three feature commits plus one merge commit, no further code changes ondevsince that merge.Design / Reference: Reviewer notes + demo assets in #1.
v0.3entry inCHANGELOG.org.Implementation
Scope identical to #1. Nothing added on
devafter that merge. Grouped summary for the release reviewer:src/) — bootstrap, router, global SCSS, config + version modulessrc/app/scss/**, 10 files) + SpaceMono Nerd Font (4 TTFs)src/shared/composables/, 4) —use-obs-websocket,use-recording-status,use-audio-analyzer,use-scene-namesrc/shared/components/, 6 new, 1 deleted) —corner-bracket,hud-frame,status-indicator,recording-timer,overlay-card,preview-modalsrc/shared/widgets/, 2) —audio-meter,live-readout/@kyonax_on_tech/cam-person+ ITEM-EXPLAIN declared in the registry (status: planned)src/views/home.vue) — sticky frosted meta bar, brand tabs, responsive 3-col card grid, search + status chips, preview modalsrc/**/*.test.js, 2 files / 17 tests) — version pipeline + overlays registry schemaFile-by-file breakdown and decision log lives in #1.
Release
Version: v0.3 (was v0.1 on
master)package.json—"version"bumped from0.1.0to0.3.0README.org—#+VERSION:, ASCII logo footer, and shields.io badge all bumped tov0.3CHANGELOG.org— new[v0.3]entry + TODO refreshed (addedINFRASTRUCTURE > TESTINGand landing-widgets-section follow-ups)Technical Details
Merge strategy for feat(v0.3): Vue app, CAM-LOG overlay, landing index, shared widgets #1 (feature branch into
dev)dev)dev)dev's history.Merge strategy for this PR (
devintomaster)master's first-parent history.git log --first-parent masterthen reads as a list of releases.Tag format
vX.Y(e.g.v0.3)vX.Y.Z(e.g.v0.3.0)VERSION_TAGderived bysrc/shared/version.js), theREADME.orgbadge, and keeps the0.xpre-release era tidy. Patch releases (v0.3.1) can extend the pattern when they happen.Testing Coverage
Test runner: Vitest @ 4.1.x with
happy-domand@vue/test-utilsCommand:
npm run testAutomated tests
src/shared/version.test.jsVERSION_TAGderivation (v<major>.<minor>)src/shared/data/overlays.test.jsuse_cases[]type,pathformat, canvas dims, no em dashesTotal: 17 tests across 2 files, all passing.
Quality gates (run on every PR)
eslint.config.mjsvianpm run lintvite.config.jsvianpm run testci.ymlci.yml*.js,*.mjs,*.html,*.css,*.vue,*.scssall have MPL headerci.ymlPre-Check Failedlabelpre-check-labeljob inci.ymlrelease.yml#+VERSION:bumped, CHANGELOG updatedHow to test this PR
Pre-merge sanity
Expected: 7 green checks: ESLint, Security Scan, License Headers, Protected Files, Unit Tests, Pre-Check Label, Release Checks.
Expected:
Releaseis present;Pre-Check Failedis absent.gh pr diff 2 --repo Kyonax/reckit --name-only | wc -lExpected: Same file list as feat(v0.3): Vue app, CAM-LOG overlay, landing index, shared widgets #1 (47 paths, including the binary SpaceMono TTFs).
Post-merge verification
master—git checkout master && git pull origin masterExpected:
HEADis the merge commit;git log --first-parent mastershows the release merge.git tag -a v0.3 -m "RECKIT v0.3" && git push origin v0.3Expected: Tag appears at
https://github.com/Kyonax/reckit/releases/tag/v0.3.https://github.com/Kyonax/reckit.Expected: README version badge reads
v0.3; ASCII logo footer reads░v0.3.master—npm ci && npm run build && npm run devExpected: Vite boots on
localhost:5173; header tag readsRECKIT v0.3; CAM-LOG overlay at/@kyonax_on_tech/cam-personrenders the same as on the feature branch.Special Deployment Requirements
git tag -a v0.3 -m "RECKIT v0.3" && git push origin v0.3. Without the tag, the GitHub Releases page will not showv0.3.gh release create v0.3 --title "RECKIT v0.3" --notes-file <v0.3-changelog-section>so the release is discoverable from the repo's releases page.masteranddev(RECOMMENDED) — add required status checks (CI / *+Release Checks / *) before the next release so future merges cannot skip the gates.Mic/Auxaudio input.Documentation
Demo assets (desktop + mobile landing page captures, CAM-LOG overlay recording in OBS, preview modal screenshot) live on #1. This PR ships the same code under a release label — no additional media to attach.
DIAGRAM — Release flow